<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id="test"></div>

        <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
		<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
		<!-- 生产环境中不建议使用 -->
		<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
        
        <script type="text/babel">
            // 创建组件
            class Count extends React.Component{
                // 构造器
                constructor(props){
                    console.log('Count---constructor');
                    super(props);
                    // 初始化状态
                    this.state={num:1}
                }
                // 组件将要挂载的钩子
                componentWillMount(){
                    console.log('Count---componentWillMount');
                }
                // 组件挂载完毕的钩子
                componentDidMount(){
                    console.log('Count---componentDidMount')
                }
                // 加1按钮的回调函数
                addBtn = () =>{
                    // 获取原状态
                    const {num} = this.state;
                    // 更新状态
                    this.setState({num:num+1});
                }
                
                // 删除组件回调函数
                deleteBtn = () =>{
                    ReactDOM.unmountComponentAtNode(document.getElementById('test'));
                }
                // 强制更新的回调
                force = () =>{
                    // 强制更新
                    this.forceUpdate();
                }
                // 组件将要卸载的钩子
                componentWillUnmount(){
                    console.log('Count---componentWillUnmount')
                }
                // 控制组件更新的"阀门"
                shouldComponentUpdate(){
                    console.log('Count---shouldComponentUpdate');
                    return true;
                }
                // 组件将要重新更新的钩子
                componentWillUpdate(){
                    // 强制更新
                    console.log('Count---componentWillUpdate');
                }
                // 组件更新完毕的钩子
                componentDidUpdate(){
                    console.log('Count---componentDidUpdate');
                }
                render(){
                    console.log('Count---render');
                    const {num} = this.state;
                    return(
                        <div>
                            <h1>当前和为:{num}</h1>
                            <button onClick={this.addBtn}>点我+1</button>
                            <button onClick={this.deleteBtn}>卸载组件</button>
                            <button onClick={this.force}>不更改任何状态中的数据,强制更新</button>
                        </div>
                    )
                }
            }
            // 渲染组件
            ReactDOM.render(<Count/>,document.getElementById('test'))
        </script>
    </body>
</html>